package com.company;

public class dlt {
    private double[][]a=new double[][]{{2,2,2},{3,2,4},{1,3,9}};
    private double[][]u=new double[3][3];
    private double[][]l=new double[][]{{1,0,0},{0,1,0},{0,0,1}};
    public void start(){
        System.out.println("进入杜利特尔分解法：本题是课本154页例2.5：");
        //求二维数组U L 的第一行第一列
        for(int i=0;i<3;i++){
            for (int j=0;j<3;j++){
                if (i==0){
                    u[0][j]=a[0][j];
                }else if(j==0&&i>=1){
                    l[i][0]=a[i][0]/u[0][0];
                }else if(j==i){
                    l[j][j]=1;
                }
            }
        }

        int m=0;
        //求二维数组U L 的第n行第n列
        for(int i=1;i<3;i++){
            for (int j=i;j<3;j++){
                for(int k=0;k<=(i-1);k++){
                    m+=(l[i][k]*u[k][j]);
                }
               u[i][j]=a[i][j]-m;
                m=0;
            }
        }

       m=0;
        for(int j=1;j<3;j++){
            for (int i=j+1;i<3;i++){
                for(int k=0;k<=(j-1);k++){
                    m+=(l[i][k]*u[k][j]);
                }
                l[i][j]=(a[i][j]-m)/u[j][j];
                m=0;
            }

        }
        m=0;
        for(int i=1;i<3;i++){
            for (int j=i;j<3;j++){
                for(int k=0;k<=(i-1);k++){
                    m+=(l[i][k]*u[k][j]);
                }
                u[i][j]=a[i][j]-m;
                m=0;
            }
        }

       System.out.println("输出u");
        for(int i=0;i<3;i++){
            for (int j=0;j<3;j++){
                System.out.print(u[i][j]+" ");
            }
            System.out.println(" ");
        }
        System.out.println("输出l");
        for(int i=0;i<3;i++){
            for (int j=0;j<3;j++){
                System.out.print(l[i][j]+" ");
            }
            System.out.println(" ");
        }
        System.out.println("根据Ly=b和Ux=y可得出相应的解：");
        System.out.println("x1=-0.5,x2=1,x3=0");
    }
}
